package clienteServidor;

import java.io.*;
import java.net.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class Servidor{
   private ObjectInputStream entrada;
   private ServerSocket servidor;
   private Socket conexion;
   private int puerto;
   
    public Servidor(int puerto){
       this.puerto=puerto;
    }
   
    public void iniciar() {
        try {
           servidor = new ServerSocket(puerto);
            while (true) {
                try {
                    System.out.println( "Esperando... \n" );
                    conexion = servidor.accept();
                    System.out.println( "Conexión recibida de: " + conexion.getInetAddress().getHostName() );
                    entrada = new ObjectInputStream(conexion.getInputStream());
                    
//                    String carpetaLocal=System.getProperty("user.home")+File.separatorChar+"imagenrecibida.png";
//                    FileOutputStream destino=new FileOutputStream(carpetaLocal);                                    
                    System.out.println("Recibiendo el archivo...");
//                    byte[] buffer = new byte[1024];
//                    int len;
//                    while((len=entrada.read(buffer))>0){
//                        destino.write(buffer,0,len);
//                    }
                    String nombre = (String) entrada.readObject();
                    String nombreFichero=System.getProperty("user.home")+File.separatorChar+nombre;
                    byte[] bytesImagen = (byte[]) entrada.readObject();
                    ByteArrayInputStream entradaImagen = new ByteArrayInputStream(bytesImagen);
                    BufferedImage imagen = ImageIO.read(entradaImagen); 
                    System.out.println("Generando el fichero: "+nombreFichero );
                    FileOutputStream out = new FileOutputStream(nombreFichero);
                    ImageIO.write(imagen,"jpg",out);
                    
                    System.out.println("HECHO. Archivo recibido");
                } catch (ClassNotFoundException ex) {
                    System.out.println("Tipo de imagen NO reconocida");
                    ex.printStackTrace();
                } catch (EOFException excepcionEOF) {
                   System.err.println("Cierre de conexión inesperado!!!");
                   excepcionEOF.printStackTrace();
                } finally {
                    entrada.close();
                    conexion.close();
                }
            }
       } catch (IOException es) {
           es.printStackTrace();
       }
    } 
  
//    // procesar la conexión con el cliente
//    private void procesarConexion() throws IOException {
//       do { // procesar los mensajes enviados por el cliente
//
//           // leer el mensaje y mostrarlo en pantalla
//           try {
//               byte[] bytesImagen = (byte[]) entrada.readObject();
//               ByteArrayInputStream entradaImagen = new ByteArrayInputStream(bytesImagen);
//               BufferedImage bufferedImage = ImageIO.read(entradaImagen);
//
//               String nombreFichero=System.getProperty("user.home")+File.separatorChar+"captura.jpg";
//               System.out.println("Generando el fichero: "+nombreFichero );
//               FileOutputStream out = new FileOutputStream(nombreFichero);
//               // esbribe la imagen a fichero
//               ImageIO.write(bufferedImage, "jpg", out);
//               out.close();
//           }
//
//           // atrapar problemas que pueden ocurrir al tratar de leer del cliente
//           catch ( ClassNotFoundException excepcionClaseNoEncontrada ) {
//               System.out.println( "\nSe recibió un tipo de objeto desconocido" );
//           }
//
//       } while ( true );
//
//    }
    public static void main( String args[] ) {
       Servidor serv = new Servidor(4000);
       serv.iniciar();
    }
}
